function fn1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(1);
            resolve();
        }, 1000)
    })
}
function fn2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(2);
            resolve();
        }, 2000)
    })
}
function fn3() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(3);
            resolve();
        }, 500)
    })
}
// fn1().then(() => {
//     fn2().then(() => {
//         fn3()
//     })
// })


// 链式调用
// fn1().then(fn2).then(fn3);

// 执行fn1函数，立即返回一个promise实例对象，但此时该对象的状态是pending（等待状态）
// .then立即触发，但是then里面的回调函数没有触发
// 等待fn1函数里的resolve（）执行完毕，此时实例对象的状态变为resolved（成功状态），
// 然后触发then里面的回调函数，此时fn2函数被调用，

//函数fn1返回一个实例对象后，两个then方法都被触发，但不会立即执行，而是等待fn1函数里的resolve（）执行完毕，
// fn1().then(() => {//then方法返回的是一个promise实例对象，所以可以继续调用then方法
//     fn2();
// })
//     .then(() => { //要保证第一个then返回的对象状态继承于 fn2 返回的对象的状态
//         fn3();
//     })

// 解决办法
fn1().then(() => {//then方法返回的是一个promise实例对象，所以可以继续调用then方法
    return fn2();
})
    .then(() => {
        fn3();
    })